package com.universest.swordholder.data.dao

import androidx.room.*
import kotlinx.coroutines.flow.Flow

/**
 * 长文本实体类
 *
 * 用于存储大段文本内容，与Passage实体分离存储以提高性能
 *
 * @property textId 文本ID，主键，自动生成
 * @property content 文本内容
 */
@Entity(tableName = "longText")
data class LongText(
    /**
     * 文本ID，主键，自动增长
     */
    @PrimaryKey(autoGenerate = true) val textId: Int = 0,

    /**
     * 文本内容，使用TEXT类型存储
     */
    @ColumnInfo(typeAffinity = ColumnInfo.TEXT) val content: String = ""
)

/**
 * 长文本数据访问对象接口
 *
 * 提供对LongText实体的数据库操作方法
 */
@Dao
interface LongTextDao {

    /**
     * 插入长文本记录
     *
     * @param longText 要插入的长文本对象
     * @return 插入记录的ID
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(longText: LongText): Long

    /**
     * 更新长文本记录
     *
     * @param longText 要更新的长文本对象
     */
    @Update
    suspend fun update(longText: LongText)

    /**
     * 删除长文本记录
     *
     * @param longText 要删除的长文本对象
     */
    @Delete
    suspend fun delete(longText: LongText)

    /**
     * 根据ID查询长文本
     *
     * @param textId 文本ID
     * @return 对应的长文本对象Flow
     */
    @Query("SELECT * FROM longText WHERE textId = :textId")
    fun getTextById(textId: Int): Flow<LongText?>

    /**
     * 查询所有长文本记录
     *
     * @return 所有长文本对象列表的Flow
     */
    @Query("SELECT * FROM longText")
    fun getAllTexts(): Flow<List<LongText>>

    /**
     * 根据ID删除长文本记录
     *
     * @param textId 要删除的文本ID
     */
    @Query("DELETE FROM longText WHERE textId = :textId")
    suspend fun deleteById(textId: Int)
}